namespace ChessKit.ChessLogics
{
  /// <summary>Defines possible states move can be before or after it's validated</summary>
  public enum ValidationError
  {
    /// <summary>Move is valid</summary>
    None,
    /// <summary>Move from empty cell</summary>
    EmptyCell,
    /// <summary>Move.Side and from cell piece colors are different</summary>
    WtongPieceColor,

    /// <summary>Castling is impossible because king or a rook had already mooved</summary>
    NoCastlingThisWay,
    
    /// <summary>Move to the cell which is already occupied with piece of the same color</summary>
    OccupiedCell,
    /// <summary>Promotion is requested for the wrong move</summary>
    CantPromote,

    /// <summary>Piece doesn't move this way</summary>
    /// <remarks>For example pawn cannot move backwards, rook cannot jump over pieces</remarks>
    PieceDoesntMoveThisWay = 0x10,
    /// <summary>Castling is impossible because king or the passing cell is under attack</summary>
    CantCastleUnderAttack,
    /// <summary>Castling is impossible the cell where the king is going to end up is occupied with enemy piece</summary>
    CantTakePieceWithCastling,
    /// <summary>Move which puts or leaves king under attack</summary>
    KingUnderAttack,

  }
}